package main

import "fmt"

// 列表节点数据结构

type ChainData struct {
	Data int
	Next *ChainData
}

//主函数

func main() {
	head := &ChainData{
		Data: 1,
		Next: &ChainData{
			Data: 2,
			Next: &ChainData{
				Data: 3,
				Next: &ChainData{
					Data: 4,
					Next: &ChainData{
						Data: 5,
						Next: &ChainData{
							Data: 6,
							Next: &ChainData{
								Data: 7,
								Next: &ChainData{
									Data: 8,
									Next: &ChainData{
										Data: 9,
										Next: nil,
									},
								},
							},
						},
					},
				},
			},
		},
	}
	fmt.Println("排序前.....")
	PrintData(head)
	data := GetReverseChain(head)
	fmt.Println("倒序后.....")
	PrintData(data)
}

// 递归每一个节点
// 将最后一个节点的指针指向上一个节点
// 并且将上一个节点的指针执行 nil
// 移动每一个节点的指针地址
func GetReverseChain(data *ChainData) *ChainData {
	if data.Next == nil {
		return data
	}
	result := GetReverseChain(data.Next)
	data.Next.Next = data
	data.Next = nil
	return result

}

// 打印节点中的值
func PrintData(data *ChainData) {
	returnData := make([]int, 0)
	for {
		returnData = append(returnData, data.Data)
		if data.Next == nil {
			break
		} else {
			data = data.Next
		}
	}
	fmt.Println(returnData)
}
